﻿#define _CRT_SECURE_NO_WARNINGS 1

//库函数和头文件
#include <stdio.h>
#include <math.h>

//int main()
//{
//	double d = 16.0;
//	double r = sqrt(d);
//	printf("%lf\n", r);// 4.000000
//	return 0;
//}

//自定义函数
//实现一个加法函数
//
//int Add(int a, int b)
//{
//	int ret = 0;
//	ret = a + b;
//	return ret;
//}

// Add函数简化写法
//int Add(int x, int y)
//{
//	return x + y;
//}

//int main()
//{
//	int a = 0;
//	int b = 0;
//	// 输入
//	scanf("%d %d", &a, &b);
//	// 调用加法函数，完成a和b的相加
//	// 求和的结果放在r中
//	// to do
//	int r = Add(a, b);
//	// 输出
//	printf("%d\n", r);
//	return 0;
//}

// 形参和实参
//int Add(int x, int y)
//{
//	int z = 0;
//	z = x + y;
//	return z;
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	// 输入
//	scanf("%d %d", &a, &b);
//	// 调用加法函数，完成a和b的相加
//	// 求和的结果放在r中
//	int r = Add(a, b);
//	// 输出
//	printf("%d\n", r);
//	return 0;
//}

// 数组做函数参数
//void set_arr(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		arr[i] = -1;
//	}
//}
//
//void print_arr(int arr[], int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	printf("\n");
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print_arr(arr, sz);//打印数组内容
//	set_arr(arr, sz);//设置数组内容为-1
//	print_arr(arr, sz);//打印数组内容
//	return 0;
//}

// 嵌套调用和链式访问
//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1;
//	else
//		return 0;
//}

//int get_days_of_month(int y, int m)
//{
//	//月份：1   2   3   4   5   6   7   8   9   10   11  12
//	//天数：31  28  31  30  31  30  31  31  30  31   30  31
//	int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//	int day = days[m];
//	if (is_leap_year(y) && m == 2)
//	{
//		day += 1;
//	}
//	return day;
//}

//int main()
//{
//	int year = 0;
//	int month = 0;
//	scanf("%d %d", &year, &month);
//	int d = get_days_of_month(year, month);
//	printf("%d\n", d);
//	return 0;
//}

// 链式访问
//int main()
//{
//	int len = strlen("abcdef");//1.strlen求字符串的长度
//	printf("%d\n", len);
//	return 0;
//}

//int main()
//{
//	printf("%d\n", strlen("abcdef"));
//	return 0;
//}

// 练习
//int main()
//{
//	printf("%d", printf("%d", printf("%d", 43)));// 4321
//	return 0;
//}

//int main()
//{
//	printf("%d ", printf("%d ", printf("%d ", 43)));// 43 3 2 
//	return 0;
//}

// 函数的声明和定义
// 单个文件

// 判断⼀年是不是闰年
// 函数定义
//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1;
//	else
//		return 0;
//}
//
//int main()
//{
//	int y = 0;
//	scanf("%d", &y);
//	int r = is_leap_year(y);//函数调用
//	if (r == 1)
//		printf("闰年\n");
//	else
//		printf("非闰年\n");
//	return 0;
//}

// 函数声明

//int is_leap_year(int y);// 函数声明
//
//int main()
//{
//	int y = 0;
//	scanf("%d", &y);
//	int r = is_leap_year(y);//函数调用
//	if (r == 1)
//		printf("闰年\n");
//	else
//		printf("非闰年\n");
//	return 0;
//}

// 函数定义
//int is_leap_year(int y)
//{
//	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
//		return 1;
//	else
//		return 0;
//}


// 多个文件
// 方式一：直接导入头文件
/*
#include "add.h"

int main()
{
	int a = 10;
	int b = 20;
	// 函数调用
	int c = Add(a, b);
	printf("%d\n", c);
	return 0;
}

*/

// 方式二：导入静态库使用

/*
* 
// lib文件使用
#include "add.h"

// 导入静态库
#pragma comment(lib, "add.lib")
int main()
{
	int a = 10;
	int b = 20;
	// 函数调用
	int c = Add(a, b);
	printf("%d\n", c);
	return 0;
}

*/

// static 和 extern

// static修饰局部变量

//代码1

//#include <stdio.h>
//void test()
//{
//	int i = 0;
//	i++;
//	printf("%d ", i);
//}
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test(); // 输出 1 1 1 1 1
//	}
//	return 0;
//}

//代码2

//#include <stdio.h>
//void test()
//{
//	//static修饰局部变量
//	static int i = 0;
//	i++;
//	printf("%d ", i);
//}
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test();// 输出 1 2 3 4 5
//	}
//	return 0;
//}

// extern声明外部变量

//#include <stdio.h>
//extern int g_val;

//int main()
//{
//	printf("%d\n", g_val);// 2018
//	return 0;
//}

// static修饰函数
#include <stdio.h>
extern int Add(int x, int y);
int main()
{
	printf("%d\n", Add(2, 3));
	return 0;
}